<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Shell初探 | YoiaL</title><meta name="keywords" content="学习笔记,菜鸟入门,Linux"><meta name="author" content="John Doe"><meta name="copyright" content="John Doe"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="Shell概念 Shell是一个命令行解释器,它为用户提供了一个向 Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shll来启动、挂起、停止甚至是编写一些程序。 一、Shell基础 1. 第一个脚本 1. 输出命令： echo [选项]  [输出内容]  选项   -e  加上-e表示支持反斜线控制的字符转换 2. 第一个脚本 vi hello.sh  \ #!&#x2F;bin&amp;">
<meta property="og:type" content="article">
<meta property="og:title" content="Shell初探">
<meta property="og:url" content="https://liaoyia.gitee.io/2019/12/11/shell/index.html">
<meta property="og:site_name" content="YoiaL">
<meta property="og:description" content="Shell概念 Shell是一个命令行解释器,它为用户提供了一个向 Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shll来启动、挂起、停止甚至是编写一些程序。 一、Shell基础 1. 第一个脚本 1. 输出命令： echo [选项]  [输出内容]  选项   -e  加上-e表示支持反斜线控制的字符转换 2. 第一个脚本 vi hello.sh  \ #!&#x2F;bin&amp;">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lybash.png">
<meta property="article:published_time" content="2019-12-11T05:08:11.000Z">
<meta property="article:modified_time" content="2021-03-01T09:05:27.082Z">
<meta property="article:author" content="John Doe">
<meta property="article:tag" content="学习笔记">
<meta property="article:tag" content="菜鸟入门">
<meta property="article:tag" content="Linux">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lybash.png"><link rel="shortcut icon" href="/liaoyia/img/favicon.png"><link rel="canonical" href="https://liaoyia.gitee.io/2019/12/11/shell/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/liaoyia/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = { 
  root: '/liaoyia/',
  algolia: undefined,
  localSearch: {"path":"search.xml","languages":{"hits_empty":"找不到您查询的内容：${query}"}},
  translate: {"defaultEncoding":1,"translateDelay":0,"msgToTraditionalChinese":"繁","msgToSimplifiedChinese":"簡"},
  noticeOutdate: undefined,
  highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true},
  copy: {
    success: '复制成功',
    error: '复制错误',
    noSupport: '浏览器不支持'
  },
  relativeDate: {
    homepage: true,
    post: true
  },
  runtime: '',
  date_suffix: {
    just: '刚刚',
    min: '分钟前',
    hour: '小时前',
    day: '天前',
    month: '个月前'
  },
  copyright: undefined,
  lightbox: 'fancybox',
  Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#121212","position":"bottom-center"},
  source: {
    jQuery: 'https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js',
    justifiedGallery: {
      js: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/js/jquery.justifiedGallery.min.js',
      css: 'https://cdn.jsdelivr.net/npm/justifiedGallery/dist/css/justifiedGallery.min.css'
    },
    fancybox: {
      js: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js',
      css: 'https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css'
    }
  },
  isPhotoFigcaption: true,
  islazyload: false,
  isanchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = { 
  isPost: true,
  isHome: false,
  isHighlightShrink: false,
  isToc: true,
  postUpdate: '2021-03-01 17:05:27'
}</script><noscript><style type="text/css">
  #nav {
    opacity: 1
  }
  .justified-gallery img {
    opacity: 1
  }

  #recent-posts time,
  #post-meta time {
    display: inline !important
  }
</style></noscript><script>(win=>{
    win.saveToLocal = {
      set: function setWithExpiry(key, value, ttl) {
        if (ttl === 0) return
        const now = new Date()
        const expiryDay = ttl * 86400000
        const item = {
          value: value,
          expiry: now.getTime() + expiryDay,
        }
        localStorage.setItem(key, JSON.stringify(item))
      },

      get: function getWithExpiry(key) {
        const itemStr = localStorage.getItem(key)

        if (!itemStr) {
          return undefined
        }
        const item = JSON.parse(itemStr)
        const now = new Date()

        if (now.getTime() > item.expiry) {
          localStorage.removeItem(key)
          return undefined
        }
        return item.value
      }
    }
  
    win.getScript = url => new Promise((resolve, reject) => {
      const script = document.createElement('script')
      script.src = url
      script.async = true
      script.onerror = reject
      script.onload = script.onreadystatechange = function() {
        const loadState = this.readyState
        if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
        script.onload = script.onreadystatechange = null
        resolve()
      }
      document.head.appendChild(script)
    })
  
      win.activateDarkMode = function () {
        document.documentElement.setAttribute('data-theme', 'dark')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
        }
      }
      win.activateLightMode = function () {
        document.documentElement.setAttribute('data-theme', 'light')
        if (document.querySelector('meta[name="theme-color"]') !== null) {
          document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
        }
      }
      const t = saveToLocal.get('theme')
    
          if (t === 'dark') activateDarkMode()
          else if (t === 'light') activateLightMode()
        
      const asideStatus = saveToLocal.get('aside-status')
      if (asideStatus !== undefined) {
        if (asideStatus === 'hide') {
          document.documentElement.classList.add('hide-aside')
        } else {
          document.documentElement.classList.remove('hide-aside')
        }
      }
    })(window)</script><link rel="stylesheet" href="/css/fishes.css"><style type="text/css">#toggle-sidebar { left : 100px }</style><meta name="generator" content="Hexo 5.4.0"></head><body><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="author-avatar"><img class="avatar-img" src="/liaoyia/null" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="site-data"><div class="data-item is-center"><div class="data-item-link"><a href="/liaoyia/archives/"><div class="headline">文章</div><div class="length-num">16</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/liaoyia/tags/"><div class="headline">标签</div><div class="length-num">9</div></a></div></div><div class="data-item is-center"><div class="data-item-link"><a href="/liaoyia/categories/"><div class="headline">分类</div><div class="length-num">6</div></a></div></div></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/liaoyia/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fa-fw fas fa-compass"></i><span> 目录</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page" href="/liaoyia/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></li><li><a class="site-page" href="/liaoyia/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></li><li><a class="site-page" href="/liaoyia/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fa-fw fa fa-heartbeat"></i><span> 娱乐</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page" href="/liaoyia/music/"><i class="fa-fw fas fa-music"></i><span> 音乐</span></a></li><li><a class="site-page" href="/liaoyia/movies/"><i class="fa-fw fas fa-video"></i><span> 电影</span></a></li><li><a class="site-page" href="/liaoyia/books/"><i class="fa-fw fa fa-book"></i><span> 书籍</span></a></li><li><a class="site-page" href="/liaoyia/games/"><i class="fa-fw fa fa-gamepad"></i><span> 游戏</span></a></li><li><a class="site-page" href="/liaoyia/ziyu/"><i class="fa-fw fa-fw fas fa-cubes"></i><span> 自言自语</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw laptop-code"></i><span> 🎯</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page" href="/liaoyia/messages/"><i class="fa-fw fa-fw fas fa-comment-dots"></i><span> 留言板</span></a></li><li><a class="site-page" href="/liaoyia/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></li><li><a class="site-page" href="/liaoyia/about/"><i class="fa-fw fa-fw fas fa-heart"></i><span> 关于我</span></a></li></ul></div></div></div></div><div class="post" id="body-wrap"><header class="post-bg" id="page-header" style="background-image: url('https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lybash.png')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/liaoyia/">YoiaL</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/liaoyia/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fa-fw fas fa-compass"></i><span> 目录</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page" href="/liaoyia/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></li><li><a class="site-page" href="/liaoyia/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></li><li><a class="site-page" href="/liaoyia/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw fa-fw fa fa-heartbeat"></i><span> 娱乐</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page" href="/liaoyia/music/"><i class="fa-fw fas fa-music"></i><span> 音乐</span></a></li><li><a class="site-page" href="/liaoyia/movies/"><i class="fa-fw fas fa-video"></i><span> 电影</span></a></li><li><a class="site-page" href="/liaoyia/books/"><i class="fa-fw fa fa-book"></i><span> 书籍</span></a></li><li><a class="site-page" href="/liaoyia/games/"><i class="fa-fw fa fa-gamepad"></i><span> 游戏</span></a></li><li><a class="site-page" href="/liaoyia/ziyu/"><i class="fa-fw fa-fw fas fa-cubes"></i><span> 自言自语</span></a></li></ul></div><div class="menus_item"><a class="site-page" href="javascript:void(0);"><i class="fa-fw laptop-code"></i><span> 🎯</span><i class="fas fa-chevron-down expand"></i></a><ul class="menus_item_child"><li><a class="site-page" href="/liaoyia/messages/"><i class="fa-fw fa-fw fas fa-comment-dots"></i><span> 留言板</span></a></li><li><a class="site-page" href="/liaoyia/link/"><i class="fa-fw fas fa-link"></i><span> Link</span></a></li><li><a class="site-page" href="/liaoyia/about/"><i class="fa-fw fa-fw fas fa-heart"></i><span> 关于我</span></a></li></ul></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="post-info"><h1 class="post-title">Shell初探</h1><div id="post-meta"><div class="meta-firstline"><span class="post-meta-date"><i class="far fa-calendar-alt fa-fw post-meta-icon"></i><span class="post-meta-label">发表于</span><time class="post-meta-date-created" datetime="2019-12-11T05:08:11.000Z" title="发表于 2019-12-11 13:08:11">2019-12-11</time><span class="post-meta-separator">|</span><i class="fas fa-history fa-fw post-meta-icon"></i><span class="post-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2021-03-01T09:05:27.082Z" title="更新于 2021-03-01 17:05:27">2021-03-01</time></span></div><div class="meta-secondline"><span class="post-meta-separator">|</span><span class="post-meta-wordcount"><i class="far fa-file-word fa-fw post-meta-icon"></i><span class="post-meta-label">字数总计:</span><span class="word-count">5.3k</span><span class="post-meta-separator">|</span><i class="far fa-clock fa-fw post-meta-icon"></i><span class="post-meta-label">阅读时长:</span><span>17分钟</span></span><span class="post-meta-separator">|</span><span class="post-meta-pv-cv"><i class="far fa-eye fa-fw post-meta-icon"></i><span class="post-meta-label">阅读量:</span><span id="busuanzi_value_page_pv"></span></span></div></div></div></header><main class="layout" id="content-inner"><div id="post"><article class="post-content" id="article-container"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/hint.css/2.4.1/hint.min.css"><h2 id="Shell概念">Shell概念</h2>
<p>Shell是一个命令行解释器,它为用户提供了一个向 Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shll来启动、挂起、停止甚至是编写一些程序。</p>
<h1>一、Shell基础</h1>
<h3 id="1-第一个脚本">1. 第一个脚本</h3>
<h4 id="1-输出命令：">1. 输出命令：</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">echo [选项]  [输出内容]  </span><br><span class="line">选项   -e  加上-e表示支持反斜线控制的字符转换</span><br></pre></td></tr></table></figure>
<h4 id="2-第一个脚本">2. 第一个脚本</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">vi hello.sh  </span><br><span class="line">\ #!&#x2F;bin&#x2F;Bash  表示写的脚本是shell脚本  主要是声明作用在这里————#不是注释</span><br><span class="line">\ #2019&#x2F;12&#x2F;11 liaoyi   这里的#表示注释功能  </span><br><span class="line">echo  -e 	“这里写需要打印的内容”  </span><br><span class="line">保存退出</span><br></pre></td></tr></table></figure>
<h4 id="3-执行脚本">3. 执行脚本</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">1. 赋予执行权限</span><br><span class="line">(1) $ chmod 755 hello.sh</span><br><span class="line">(2) $ chmod u+x hello.sh    #赋予脚本hello.sh脚本执行权限。然后通过路径&#x2F;hello.sh来执行</span><br><span class="line">2. $bash hello.sh 来执行.</span><br><span class="line">3. $sh hello.sh</span><br></pre></td></tr></table></figure>
<p><code>注意：</code>运行在Windows下编写的脚本会提示文件格式错误，此时需要对文本中出现的特殊字符进行格式转换，直接在Linux命令行运行<br>
dos2unix [文件名], 这个时候就可以对该文件进行格式转换.<br>
（如果这个命令没有安装，使用yum -y install dos2unix 进行安装就可以）.</p>
<h3 id="2-base的基本功能">2. base的基本功能</h3>
<h4 id="1-历史命令和命令补全功能">1. 历史命令和命令补全功能</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ history   查询所有的历史命令  </span><br><span class="line">$ history   [选项][历史命令保存文件]</span><br><span class="line"></span><br><span class="line">$ vi  .bash_history   查看所有的历史命令保存文件</span><br><span class="line"></span><br><span class="line">按一下tab键   键进行代码的补全    </span><br><span class="line">按两下tab键   可以对所有需要补全的代码进行罗列展示</span><br></pre></td></tr></table></figure>
<h4 id="2-命令别名与快捷键">2. 命令别名与快捷键</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">alias  别名 &#x3D;&#39;原命令&#39;   # 设置命令别名  </span><br><span class="line">alias  vi &#x3D;‘vim’  </span><br><span class="line">这种别名只会临时生效，如果想要别名永久生效  需要更改配置文件</span><br></pre></td></tr></table></figure>
<h4 id="快捷键">快捷键</h4>
<table>
<thead>
<tr>
<th>命令</th>
<th>效果</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ctrl  +  C</td>
<td>强制终止当前的命令</td>
</tr>
<tr>
<td>Ctrl  +  L</td>
<td>清屏 相当于clear命令</td>
</tr>
<tr>
<td>Ctrl  +  U</td>
<td>删除或者剪切光标之前的命令</td>
</tr>
<tr>
<td>Ctrl  +  K</td>
<td>删除或者剪切光标之后的内容</td>
</tr>
<tr>
<td>Ctrl  +  Y</td>
<td>粘贴Ctrl  + U 或者Ctrl  + K 剪切的内容</td>
</tr>
<tr>
<td>Ctrl  +  D</td>
<td>退出当前终端</td>
</tr>
</tbody>
</table>
<h4 id="3-输入输出与重定向">3. 输入输出与重定向</h4>
<p>输出重定向</p>
<p>就是把原本应该输出到屏幕上内容输出到文件保存在文件中.</p>
<table>
<thead>
<tr>
<th>动作</th>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>标准输出重定向</td>
<td>命令 &gt; 文件名</td>
<td>以覆盖的方式，把命令的正确输出，输出到制定的文件或者是设备中</td>
</tr>
<tr>
<td>标准输出重定向</td>
<td>命令 &gt;&gt; 文件名</td>
<td>以追加的方式，把命令的正确输出，输出到指定的文件或者是设备中</td>
</tr>
<tr>
<td>标准错误输出重定向</td>
<td>错误命令 2&gt; 文件名</td>
<td>以覆盖的方式，把命令的错误输出，输出到指定的文件或者是设备中</td>
</tr>
<tr>
<td>标准错误输出重定向</td>
<td>错误命令 2&gt;&gt;文件名</td>
<td>以追加的方式，把命令的错误输出，输出到指定的文件或者是设备</td>
</tr>
</tbody>
</table>
<p>通常使用的是以下命令，把正确命令和错误命令都可以同时的保存：</p>
<table>
<thead>
<tr>
<th>动作</th>
<th>命令</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>正确输出和错误输出同时保存</td>
<td>命令 &gt;  文件名</td>
<td>以覆盖的方式，把命令的正确输出，输出到制定的文件或者是设备中</td>
</tr>
<tr>
<td>正确输出和错误输出同时保存</td>
<td>命令 &gt;&gt; 文件名</td>
<td>以追加的方式，把命令的正确输出，输出到指定的文件或者是设备中</td>
</tr>
</tbody>
</table>
<h4 id="输入重定向">输入重定向</h4>
<p>本来的输入是通过键盘直接输入的，现在我们通过文件的方式来,输入，这就是输入重定向。</p>
<p>命令格式</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">wc 【选项】【文件名】</span><br><span class="line"></span><br><span class="line">选项：</span><br><span class="line"></span><br><span class="line">|  -c   |  统计字节数</span><br><span class="line">|  -w   |  统计单词数</span><br><span class="line">|  -l   |  统计行数</span><br></pre></td></tr></table></figure>
<h4 id="4-多命令顺序执行与管道符">4. 多命令顺序执行与管道符</h4>
<p>|命令；命令 |      多个命令顺序执行，命令之间没有逻辑联系|<br>
|命令1 &amp;&amp; 命令2|   逻辑与 命令1执行完之后，命令2才会继续往下执行|</p>
<p>管道符</p>
<p>命令1 | 命令2  命令1的正确输出作为命令2的操作对象</p>
<h4 id="5-通配符和特殊符号">5. 通配符和特殊符号</h4>
<table>
<thead>
<tr>
<th>符号</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>？</td>
<td>匹配一个任意字符</td>
</tr>
<tr>
<td>*</td>
<td>匹配0个或者多个任意字符，也就是 可以匹配任何内容</td>
</tr>
<tr>
<td>[ ]</td>
<td>匹配中括号中任意一个字符，例如：[abc] 代表一定匹配一个字符，或者是a，或者是b，或者是c</td>
</tr>
<tr>
<td>[ - ]</td>
<td>匹配 括号中任意一个字符，- 代表一个范围，例如 [a-z] 代表匹配一个小写的字母</td>
</tr>
</tbody>
</table>
<p>Bash中的其他特殊符号</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">‘ ’  单引号 在单引号中的所有的特殊符号  如 “$” “\” 都没有特殊含义</span><br><span class="line">“ ”  双引号 在双引号中特殊符号都是没有特殊含义|但是 “$”  “\”  是例外的，拥有调用变量的值 例如给变量赋值  name &#x3D; sc</span><br><span class="line"></span><br><span class="line">‘ ’  反引号括起来的是系统命令。在bash中会优先的执行它。它的作用和$() 作用是一样的，不过推荐使用的是$() ，因为反引号在使用的过程中容易看错。  </span><br><span class="line"></span><br><span class="line">\#   在bash中  #开头的代表注释</span><br><span class="line"></span><br><span class="line"> $    在调用变量的值，如果需要调用变量的的值的时候，需要使用$加变量名  的方式来获取到变量的值。</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h4 id="3-Bash的变量">3. Bash的变量</h4>
<h4 id="1-用户自定义变量">1. 用户自定义变量</h4>
<p>在bash中，变量的默认类型都是字符串类型的，如果要进行数值运算，就需要指定变量 类型为数值型。</p>
<p><code>注意：</code></p>
<p>· 变量是用等号连接，而且等号左右两端不能有空格<br>
· 变量的值如果有空格，需要使用单引号或者是双引号包括<br>
· 在变量的值中，可以使用 \ 转义符<br>
· 如果是把命令的结果作为变量赋值给变量，则需要使用单引号或者是$() 包括命令</p>
<p>变量的定义：</p>
<p>比如定义一个变量名为a的变量 a = &quot; hello liaoyi &quot; 调用的时候，我们可以使用echo来调用</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"> a&#x3D;&quot; hello liaoyi&quot;</span><br><span class="line">echo $name</span><br><span class="line">输出结果：hello liaoyi</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>调用的时候只需要记住，在变量名之前加$符</p>
<p>变量查看 set<br>
变量删除 unset name</p>
<h3 id="2-环境变量">2. 环境变量</h3>
<p>主要保存的是和系统操作环境相关的数据.</p>
<p>用户自定义变量只在当前的shell中生效，而环境变量会在当前shell和这个shell的所有子shell中生效，如果把环境变量写入相应的 配置文件中那么这个环境变量就会在所有的shell中生效.</p>
<h4 id="设置环境变量">设置环境变量</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">Export 变量名&#x3D;变量值 #申明变量</span><br></pre></td></tr></table></figure>
<p>例如我们定义两个变量</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">name&#x3D;ly  </span><br><span class="line">export sex &#x3D; ni</span><br><span class="line">set命令 查看到两个已定义变量，但此时候如果我们再进入一个bash（通过命令bash 进入，我们可以通过pstree来查看进程数）</span><br><span class="line"></span><br><span class="line">env    &#x2F;&#x2F; 专门的用来查看变量的命令</span><br><span class="line"></span><br><span class="line">Unset  变量名  &#x2F;&#x2F;  删除环境变量</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h4 id="3-位置参数变量">3. 位置参数变量</h4>
<p>这种变量只要是用来向脚本当中传递参数或者是数据的，变量名不能自己定义，变量的作用是固定的，只能更改里面的值。</p>
<table>
<thead>
<tr>
<th>位置参数变量</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>$n</td>
<td>n在这里代表的是数字，$0 代表命令本身，$1–9代表的是第一到第九个参数，十个以上的参数需要用大括号例如{10}</td>
</tr>
<tr>
<td>$*</td>
<td>这个命令代表命令行中所有的参数，$* 把所有的参数看成一个整体</td>
</tr>
<tr>
<td>$@</td>
<td>这个命令也代表的是命令行中所有的参数，不过不同的是$@ 把每个参数区别对待</td>
</tr>
<tr>
<td>$#</td>
<td>这个命令代表命令行中所有参数的个数</td>
</tr>
</tbody>
</table>
<p>我们通过一个简单的例子来查看一个使用方法，我们写一个bash</p>
<p>Canshu.sh定义两个参数，然后输出两个参数的和</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">    #!&#x2F;bin&#x2F;bash  </span><br><span class="line">    sum1&#x3D;$1  </span><br><span class="line">    sum2&#x3D;$2  </span><br><span class="line">    sum&#x3D;$(($sum1+$sum2))  </span><br><span class="line">    echo &quot;sum is : $sum&quot;  使用命令echo </span><br><span class="line"></span><br><span class="line">[root@Ly~]$ Chmod  755 canshu.sh  给这个sh 赋予执行权限</span><br><span class="line">[root@Ly~]$ .&#x2F;canshu.sh 11 22  执行，并向这个sh传入两个参数 11  22  求和</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>下面通过一个简单的sh来看一个几个位置参数的区别。<br>
<a target="_blank" rel="noopener" href="http://Canshu2.sh">Canshu2.sh</a></p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">  \#!&#x2F;bin&#x2F;bash</span><br><span class="line">    echo $#</span><br><span class="line">    echo $*</span><br><span class="line">    echo $@</span><br><span class="line">[root@Ly~]$ chmod 755 canshu2.sh</span><br><span class="line">[root@Ly~]$.&#x2F;canshu2.sh 11 22 33 44 55 66</span><br><span class="line">6</span><br><span class="line">11 22 33 44 55 66</span><br><span class="line">11 22 33 44 55 66</span><br></pre></td></tr></table></figure>
<p><code>注意：</code><br>
∗  和 @ 的区别，具体的区别可以在for循环中看出<br>
$* 中的所有参数看成是一个整体，所有在for循环中只会循环一次<br>
@  中的每个参数都看成是相互独立的，，所以@ 中有几个参数，就会循环几次</p>
<p>例如：</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"> \#!&#x2F;bin&#x2F;bash</span><br><span class="line">    for x in &quot;$*&quot;</span><br><span class="line">    </span><br><span class="line">    do</span><br><span class="line">    echo $x</span><br><span class="line">    done</span><br><span class="line">    </span><br><span class="line">    for y in &quot;$@&quot;</span><br><span class="line">    do</span><br><span class="line">    echo $y </span><br><span class="line">    done</span><br><span class="line"></span><br><span class="line">[root@Ly~]$ chmod 755 canshu3.sh</span><br><span class="line">[root@Ly~]$ .&#x2F;canshu3.sh 1 2 3 4 5</span><br><span class="line">1 2 3 4 5</span><br><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td></tr></table></figure>
<h3 id="4-预定义变量">4.预定义变量</h3>
<table>
<thead>
<tr>
<th>预定义变量</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>$?</td>
<td>最后一次执行的命令的返回状态。如果这个变量的值为0，证明上一个命令是正确的；如果这个变量的值是非0（具体是哪一个数，由命令自己决定），则证明上一个命令执行不正确了.</td>
</tr>
<tr>
<td>$$</td>
<td>当前进程的进程号</td>
</tr>
<tr>
<td>$!</td>
<td>后台运行的最后一个进程的进程号(PID)</td>
</tr>
</tbody>
</table>
<p>例如使用echo $? 我们就可以打印出 来看看上一条命令是否正确执行<br>
Echo $$ 查看当前进程号pid</p>
<h4 id="接受键盘输入">接受键盘输入</h4>
<p>Read【选项】【变量名】</p>
<table>
<thead>
<tr>
<th>选项</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>-p</td>
<td>提示信息在等待read输入时，输出提示信息</td>
</tr>
<tr>
<td>-t</td>
<td>秒数    read命令会一直等待用户输入，使用此选项可以指定等待时间</td>
</tr>
<tr>
<td>-n</td>
<td>字符数  read命令只接受指定的字符数，就会在执行</td>
</tr>
<tr>
<td>-s</td>
<td>隐藏输入的数据适用于机密信息的输入</td>
</tr>
</tbody>
</table>
<h4 id="4-base的运算符">4.base的运算符</h4>
<h4 id="1-数值运算和运算符">1. 数值运算和运算符</h4>
<p>Declare  声明变量类型</p>
<p>declare 【+/-】【选项】【变量名】</p>
<table>
<thead>
<tr>
<th>选项</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td>给变量设定类型属性</td>
</tr>
<tr>
<td>+</td>
<td>取消变量的类型属性</td>
</tr>
<tr>
<td>-i</td>
<td>将变量声明为整数型（integer）</td>
</tr>
<tr>
<td>-x</td>
<td>将变量声明为环境变量</td>
</tr>
<tr>
<td>-p</td>
<td>显示指定变量的被生命的类型</td>
</tr>
</tbody>
</table>
<h4 id="数值运算：">数值运算：</h4>
<p>方法一：<br>
aa=11<br>
bb=22<br>
declare -i cc=aa+aa+aa+bb  #将变量aa和bb 进行数值运算.</p>
<p>方法二：使用expr或者let数值运算工具</p>
<p>方法三：使用 $（（运算式）） 或者是 [运算式]ff=[运算式]ff =[运算式]ff=((aa+aa+aa+bb))</p>
<p><code>推荐 使用方法三</code></p>
<h4 id="2-变量测试和内容替换">2.变量测试和内容替换</h4>
<p>主要的作用是通过判断x的值来判断y是否有值.</p>
<h4 id="5-环境变量配置文件">5. 环境变量配置文件</h4>
<h4 id="1-环境变量配置文件简介">1.环境变量配置文件简介</h4>
<p>Source命令</p>
<p>Source 配置文件或者 .配置文件</p>
<p>环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量，<br>
比如PATH HISTZIZE PSI HOSTNAME等默认环境变量</p>
<h5 id="2-环境变量配置文件作用">2.环境变量配置文件作用</h5>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"> &#x2F;etc&#x2F;下的环境变量对所有的用户都是生效的  </span><br><span class="line">&#x2F;etc&#x2F;profile  </span><br><span class="line">&#x2F;etc&#x2F;profile.d&#x2F;*.sh  </span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h1>二、Shell编程</h1>
<h2 id="1-基础正则表达式">1. 基础正则表达式</h2>
<h3 id="正则表达式和通配符">正则表达式和通配符</h3>
<p>·正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。</p>
<p>·通配符用来匹配符合条件的文件名，通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。</p>
<p>·通配符匹配的是文件名，正则表达式是指在一个文件中搜索符合要求的字符串</p>
<h3 id="基础正则表达式">基础正则表达式</h3>
<p>·前一个字符匹配0次或任意多次<br>
·匹配除了换行符外的任意一个字符<br>
·匹配行首 ^hell 匹配以hello开头的行</p>
<p>在搜索文件时， 我们可以通过grep命令来进行匹配</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">grep  “aa*” 文件名   # 匹配至少包含一个a的行</span><br><span class="line">grep “s..d” 文件名  # 会匹配在字母s和d之间一定有两个字符的单词</span><br></pre></td></tr></table></figure>
<h2 id="2-字符截取命令">2.字符截取命令</h2>
<h4 id="Cut字段提取命令">Cut字段提取命令</h4>
<p>cut 【选项】 文件名</p>
<p>选项：<br>
-f  列号   提取第几列<br>
-d 分隔符 按照指定分隔符分割列<br>
<code>注意：</code>一般cut命令不独立使用，都是跟管道符grep命令配合使用<br>
命令 df -h 查看分区使用率</p>
<h4 id="Printf命令">Printf命令</h4>
<p>格式化打印命令，如果想要学习awk命令 需要先学习printf命令<br>
输出类型</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">%ns      输出字符串  n是数字代表输出几个字符</span><br><span class="line"></span><br><span class="line">%ni      输出整数，n是数字指输出几个字符</span><br><span class="line"></span><br><span class="line">%m.nf   输出浮点数</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>在awk命令输出中支持print和printf命令<br>
print 命令会在每个输出之后自动加入一个换行符（Linux默认是没有print命令的，只能在awk中使用）<br>
Printf命令是标准格式输出命令，不会自动增加换行符，需要手动增加换行符。</p>
<p><code>Awk命令</code></p>
<p>命令格式</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">Awk ‘条件1&#123;动作1&#125; 条件2&#123;动作2&#125;...’  文件名</span><br></pre></td></tr></table></figure>
<p>条件：一般使用条件关系表达式作为条件</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">X&gt;10  判断变量x是否大于10</span><br><span class="line">X&gt;&#x3D;10 大于等于</span><br><span class="line">X&lt;&#x3D;10 小于等于</span><br></pre></td></tr></table></figure>
<p>动作：<br>
格式化输出<br>
流程控制语句</p>
<p>例如：</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">使用awk 命令输出df -h磁盘信息的第一列和第五列第六列</span><br><span class="line"></span><br><span class="line">[root@Ly ~]$ df -h | awk &#39;&#123;print $1 &quot;\t&quot; $5 &quot;\t&quot; $6&#125;&#39;</span><br><span class="line">Filesystem	Use%	Mounted</span><br><span class="line">&#x2F;dev&#x2F;vda1	27%	&#x2F;</span><br><span class="line">devtmpfs	0%	&#x2F;dev</span><br><span class="line">tmpfs	0%	&#x2F;dev&#x2F;shm</span><br><span class="line">tmpfs	1%	&#x2F;run</span><br><span class="line">tmpfs	0%	&#x2F;sys&#x2F;fs&#x2F;cgroup</span><br><span class="line">tmpfs	1%	&#x2F;run&#x2F;user&#x2F;0</span><br><span class="line">[root@Ly ~]$ </span><br></pre></td></tr></table></figure>
<p>BEGIN 命令</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">[root@Ly~]# awk &#39;BEGIN&#123;print&#123;&quot;zhe shi yi ge begin &quot;&#125; &#123;print $1&#125;&#39; 在所有的命令执行之前先执行begin命令</span><br></pre></td></tr></table></figure>
<p>Sed命令</p>
<p>sed命令是一种流编辑器，它是文本处理中非常中的工具，能够完美的配合正则表达式使用，功能不同凡响。处理时，把当前处理的行存储在临时缓冲区中，称为“模式空间”（pattern space），接着用sed命令处理缓冲区中的内容，处理完成后，把缓冲区的内容送往屏幕。接着处理下一行，这样不断重复，直到文件末尾。文件内容并没有改变，除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件；简化对文件的反复操作；编写转换程序等。</p>
<p>Sed是几乎包括在所有的UNIX平台包括Linux的轻量级流编辑器。Sed主要是用来将数据进行选取、替换、删除、新增的命令。</p>
<p><code>和vi的区别</code> vi只能用来修改文件中的内容。Sed不仅能修改文件而且还可以直接修改命令的结果。在shell脚本中sed是一个非常重要的编辑器.</p>
<p>命令格式:</p>
<p>Sed 【选项】 ‘ 【动作】’ 文件名</p>
<p>选项：</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">|  -n  |  一般sed命令会把所有数据都输出到屏幕上，如果加上这个选项，则只会把sed命令处理过的行输出到屏幕上</span><br><span class="line">|  -e  |  允许对输入数据应用多条sed命令编辑</span><br><span class="line">|  -i  |  用sed修改结果直接修改读取数据的文件，而不是由屏幕直接输出</span><br></pre></td></tr></table></figure>
<p>动作：</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">a\  : 追加，在当前行后添加一行或者多行。添加多行时，除最后一行外，每行末尾都需要用\ 代表数据完结.</span><br><span class="line">Sed ‘2a  zhuijia de neirong’ 文件名	这样我们就在文件中的第二行的后面追加了我们输出的内容</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">c\  : 行替换</span><br><span class="line"></span><br><span class="line">i\  : 行插入</span><br><span class="line">Sed ‘2i  charu’ 文件名  在第二行之前插入了一个内容为charu的内容</span><br><span class="line"></span><br><span class="line">d\  : 删除，删除指定的行</span><br><span class="line">P   : 打印，打印指定的行</span><br><span class="line">h 拷贝模板块的内容到内存中的缓冲区</span><br><span class="line">H 追加模板块的内容到内存中的缓冲区</span><br><span class="line">g 获得内存缓冲区的内容，并替代当前模板块中的文本</span><br><span class="line">G 获得内存缓冲区的内容，并追加到当前模板块文本的后面</span><br><span class="line">l 列表不能打印字符的清单</span><br><span class="line">n 读取下一个输入行，用下一个命令处理新的行而不是用第一个命令。</span><br><span class="line">N 追加下一个输入行到模板块后面并在二者间嵌入一个新行，改变当前行号码</span><br><span class="line">p 打印模板块的行</span><br><span class="line">P (大写) 打印模板块的第一行</span><br><span class="line">q 退出Sed</span><br></pre></td></tr></table></figure>
<h2 id="3-字符处理命令">3.字符处理命令</h2>
<p>排序命令</p>
<p>Sort 【选项】 文件名</p>
<p>选项</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">|  -f  |  忽略大小写</span><br><span class="line">|  -n  |  以数值型进行排序，默认的是使用的字符串型进行排序</span><br><span class="line">|  -r  |  反向排序</span><br><span class="line">|  -t  |  指定分隔符，默认的分隔符是制表符</span><br><span class="line">|  -k n[,m]  | 按照指定的字段范围排序，从第n个字段开始，m字段结束，默认是到行尾.</span><br></pre></td></tr></table></figure>
<p>统计命令wc</p>
<p>Wc 【选项】文件名</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">选项：</span><br><span class="line">| -l |  只统计行数</span><br><span class="line">| -w |  只统计单词数</span><br><span class="line">| -m |  只统计字符数</span><br></pre></td></tr></table></figure>
<h2 id="4-条件判断">4.条件判断</h2>
<h4 id="按照文件类型进行判断">按照文件类型进行判断</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">- b ：判断文件是否存在，并且是否为块设备文件</span><br><span class="line">- c ：判断该文件是否存在，并且是否是字符设备文件</span><br><span class="line">- d ：判断该文件是否存在，并且是否是目录文件</span><br><span class="line">- e ：判断该文件是否存在</span><br><span class="line">- f ：判断该文件是否存在。并且是否是普通文件</span><br></pre></td></tr></table></figure>
<p>判断格式：</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">$ test -e &#x2F;root&#x2F;install.log 可以判断root目录下install.log文件是否存在</span><br></pre></td></tr></table></figure>
<p>或者 [ -e /root/install.log] 也可以进行判断</p>
<h4 id="两个文件之间进行比较">两个文件之间进行比较</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">文件1 -nt 文件2  ：判断文件1的修改时间是否比文件2的新</span><br><span class="line">文件1 -ot 文件2  ：判断文件1的修改时间是否比文件2的旧</span><br><span class="line">文件1 -ef 文件2  ：判断文件1是否和文件2的inode号是否一致，可以理解为两个文件是否是同一个文件。这个判断用于判断硬链接是很好的方法。</span><br></pre></td></tr></table></figure>
<h4 id="两个整数之间的比较">两个整数之间的比较</h4>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">整数1 -eq 整数2 ：判断整数1是否和整数2相等</span><br><span class="line">整数1 -ne 整数2 ：判断整数2是否和整数2不相等</span><br><span class="line">整数1 -gt 整数2 ：判断整数1是否大于整数2</span><br><span class="line">整数1 -lt 整数2 ：判断整数1是否小于整数2</span><br><span class="line">整数1 -ge 整数2 ：判断整数1是否大于等于整数2</span><br><span class="line">整数1 -le 整数2 ：判断整数1是否小于等于整数2</span><br><span class="line">&#96;&#96;&#96;&#96;</span><br><span class="line"></span><br><span class="line">#### 字符串的判断</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>-z 字符串  ：判断字符串是否为空<br>
-n 字符串  ：判断字符串是否为非空<br>
字符串1==字符串2 ：判断字符串1是否和字符串2相等<br>
字符串1！=字符串2：判断字符串1是否和字符串2不相等</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">#### 多重条件判断</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>判断1 -a 判断2 ：逻辑与，判断1和判断2都成立，最终的结果才为真<br>
判断1 -o 判断2 ：逻辑或，判断1和判断2有一个成立，最终的结果就为真<br>
！判断 ： 逻辑非，使原始的判断式取反</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">## 5.流程控制</span><br><span class="line"></span><br><span class="line">### 1.if语句</span><br><span class="line"></span><br><span class="line">我们在进行判断的时候；</span><br><span class="line">$ [-e &#x2F;root] 判断root文件是否存在</span><br><span class="line"></span><br><span class="line">如果存在我们可以通过命令行 echo $? 返回0 就说明存在，如果返回的是非0，就说明不存在.</span><br><span class="line"></span><br><span class="line">或者[-e &#x2F;root] &amp;&amp;echo yes || echo no</span><br><span class="line"></span><br><span class="line">#### 单分支if条件语句</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>If [条件判断式] ; then<br>
程序<br>
fi</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line">或者</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>If [ 条件判断式]<br>
then<br>
程序<br>
fi</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">&#96;注意：&#96;</span><br><span class="line">是以if 开头 以fi 结尾</span><br><span class="line">条件判断式中就是使用test命令判断，所以中括号和条件判断式之间必须有空格</span><br><span class="line">then后面跟的是符合条件之后执行的程序，可以放在[] 之后，用；分割，也可以换行写入，就不需要了.</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#### 双分支if条件语句</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>If  [条件判断式]<br>
then<br>
条件成立时，执行的程序<br>
else<br>
条件不成立时，执行的另一个程序<br>
Fi</p>
<pre><code>

#### 多分支if条件语句

<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">If [条件判断1]</span><br><span class="line">then</span><br><span class="line">条件成立时，执行的程序</span><br><span class="line">elif</span><br><span class="line">条件判断2成立时，执行程序2</span><br><span class="line"></span><br><span class="line">else</span><br><span class="line">当所有条件都不成立时，最后执行此程序</span><br><span class="line">Fi  </span><br></pre></td></tr></table></figure>

## 2.case语句

case只能判断一种条件关系，而if语句可以判断多种条件关系.

<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">Case $变量名  in </span><br><span class="line">&quot; 值1&quot; ) </span><br><span class="line">&quot;执行语句&quot;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&quot; 值2 &quot;)</span><br><span class="line">&quot; 执行语句 &quot;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Esac</span><br></pre></td></tr></table></figure>

## 3.for循环

语法格式：


<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">For 变量  in 值1  值2 值3...</span><br><span class="line">Do </span><br><span class="line">程序</span><br><span class="line">Done</span><br></pre></td></tr></table></figure></code></pre>
</article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta">文章作者: </span><span class="post-copyright-info"><a href="mailto:null">John Doe</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta">文章链接: </span><span class="post-copyright-info"><a href="https://liaoyia.gitee.io/2019/12/11/shell/">https://liaoyia.gitee.io/2019/12/11/shell/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta">版权声明: </span><span class="post-copyright-info">本博客所有文章除特别声明外，均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">CC BY-NC-SA 4.0</a> 许可协议。转载请注明来自 <a href="https://liaoyia.gitee.io" target="_blank">YoiaL</a>！</span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/liaoyia/tags/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">学习笔记</a><a class="post-meta__tags" href="/liaoyia/tags/%E8%8F%9C%E9%B8%9F%E5%85%A5%E9%97%A8/">菜鸟入门</a><a class="post-meta__tags" href="/liaoyia/tags/Linux/">Linux</a></div><div class="post_share"><div class="social-share" data-image="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lybash.png" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/social-share.js/dist/css/share.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/social-share.js/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><div class="prev-post pull-left"><a href="/liaoyia/2019/12/12/Git/"><img class="prev-cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lygit.png" onerror="onerror=null;src='/liaoyia/img/404.jpg'" alt="cover of previous post"><div class="pagination-info"><div class="label">上一篇</div><div class="prev_info">初探 Git</div></div></a></div><div class="next-post pull-right"><a href="/liaoyia/2019/11/26/2020/"><img class="next-cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-ly20200101.jpg" onerror="onerror=null;src='/liaoyia/img/404.jpg'" alt="cover of next post"><div class="pagination-info"><div class="label">下一篇</div><div class="next_info">“ 如果生活是夹心汤圆，那我这碗是一团糟糕。 ”</div></div></a></div></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span> 相关推荐</span></div><div class="relatedPosts-list"><div><a href="/liaoyia/2019/12/27/Linux-sed/" title="Linux 三剑客 "><img class="cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lyphotosnn3.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2019-12-27</div><div class="title">Linux 三剑客 </div></div></a></div><div><a href="/liaoyia/2019/11/15/linux-文件权限/" title="Linux 文件权限"><img class="cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lyphotos677.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2019-11-15</div><div class="title">Linux 文件权限</div></div></a></div><div><a href="/liaoyia/2019/11/12/Linux-网络配置/" title="Iinux 网络配置"><img class="cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lylinux.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2019-11-12</div><div class="title">Iinux 网络配置</div></div></a></div><div><a href="/liaoyia/2020/06/26/MySQL基础/" title="Mysql回顾"><img class="cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lymysql.jpg" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-06-26</div><div class="title">Mysql回顾</div></div></a></div><div><a href="/liaoyia/2020/06/22/css层叠样式表/" title="Css层叠样式表期末复习"><img class="cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lyHTML.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-06-22</div><div class="title">Css层叠样式表期末复习</div></div></a></div><div><a href="/liaoyia/2020/04/29/MySQL表查询实训笔记/" title="MySQL表查询实训"><img class="cover" src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lymonvpng.png" alt="cover"><div class="content is-center"><div class="date"><i class="far fa-calendar-alt fa-fw"></i> 2020-04-29</div><div class="title">MySQL表查询实训</div></div></a></div></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="card-info-avatar is-center"><img class="avatar-img" src="/liaoyia/null" onerror="this.onerror=null;this.src='/liaoyia/img/friend_404.gif'" alt="avatar"/><div class="author-info__name">John Doe</div><div class="author-info__description"></div></div><div class="card-info-data"><div class="card-info-data-item is-center"><a href="/liaoyia/archives/"><div class="headline">文章</div><div class="length-num">16</div></a></div><div class="card-info-data-item is-center"><a href="/liaoyia/tags/"><div class="headline">标签</div><div class="length-num">9</div></a></div><div class="card-info-data-item is-center"><a href="/liaoyia/categories/"><div class="headline">分类</div><div class="length-num">6</div></a></div></div><a class="button--animated" id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/xxxxxx"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/liaoyio" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="/liaoyia/2417276459" target="_blank" title="QQ"><i class="fas fa-qq"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn card-announcement-animation"></i><span>公告</span></div><div class="announcement_content">This is my Blog</div></div><div class="sticky_layout"><div class="card-widget" id="card-toc"><div class="item-headline"><i class="fas fa-stream"></i><span>目录</span></div><div class="toc-content"><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#Shell%E6%A6%82%E5%BF%B5"><span class="toc-number">1.</span> <span class="toc-text">Shell概念</span></a></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link"><span class="toc-number"></span> <span class="toc-text">一、Shell基础</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC"><span class="toc-number">0.1.</span> <span class="toc-text">1. 第一个脚本</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#1-%E8%BE%93%E5%87%BA%E5%91%BD%E4%BB%A4%EF%BC%9A"><span class="toc-number">0.1.1.</span> <span class="toc-text">1. 输出命令：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC"><span class="toc-number">0.1.2.</span> <span class="toc-text">2. 第一个脚本</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC"><span class="toc-number">0.1.3.</span> <span class="toc-text">3. 执行脚本</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-base%E7%9A%84%E5%9F%BA%E6%9C%AC%E5%8A%9F%E8%83%BD"><span class="toc-number">0.2.</span> <span class="toc-text">2. base的基本功能</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#1-%E5%8E%86%E5%8F%B2%E5%91%BD%E4%BB%A4%E5%92%8C%E5%91%BD%E4%BB%A4%E8%A1%A5%E5%85%A8%E5%8A%9F%E8%83%BD"><span class="toc-number">0.2.1.</span> <span class="toc-text">1. 历史命令和命令补全功能</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-%E5%91%BD%E4%BB%A4%E5%88%AB%E5%90%8D%E4%B8%8E%E5%BF%AB%E6%8D%B7%E9%94%AE"><span class="toc-number">0.2.2.</span> <span class="toc-text">2. 命令别名与快捷键</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E5%BF%AB%E6%8D%B7%E9%94%AE"><span class="toc-number">0.2.3.</span> <span class="toc-text">快捷键</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E4%B8%8E%E9%87%8D%E5%AE%9A%E5%90%91"><span class="toc-number">0.2.4.</span> <span class="toc-text">3. 输入输出与重定向</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%BE%93%E5%85%A5%E9%87%8D%E5%AE%9A%E5%90%91"><span class="toc-number">0.2.5.</span> <span class="toc-text">输入重定向</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#4-%E5%A4%9A%E5%91%BD%E4%BB%A4%E9%A1%BA%E5%BA%8F%E6%89%A7%E8%A1%8C%E4%B8%8E%E7%AE%A1%E9%81%93%E7%AC%A6"><span class="toc-number">0.2.6.</span> <span class="toc-text">4. 多命令顺序执行与管道符</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#5-%E9%80%9A%E9%85%8D%E7%AC%A6%E5%92%8C%E7%89%B9%E6%AE%8A%E7%AC%A6%E5%8F%B7"><span class="toc-number">0.2.7.</span> <span class="toc-text">5. 通配符和特殊符号</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-Bash%E7%9A%84%E5%8F%98%E9%87%8F"><span class="toc-number">0.2.8.</span> <span class="toc-text">3. Bash的变量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%98%E9%87%8F"><span class="toc-number">0.2.9.</span> <span class="toc-text">1. 用户自定义变量</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F"><span class="toc-number">0.3.</span> <span class="toc-text">2. 环境变量</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F"><span class="toc-number">0.3.1.</span> <span class="toc-text">设置环境变量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-%E4%BD%8D%E7%BD%AE%E5%8F%82%E6%95%B0%E5%8F%98%E9%87%8F"><span class="toc-number">0.3.2.</span> <span class="toc-text">3. 位置参数变量</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#4-%E9%A2%84%E5%AE%9A%E4%B9%89%E5%8F%98%E9%87%8F"><span class="toc-number">0.4.</span> <span class="toc-text">4.预定义变量</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%8E%A5%E5%8F%97%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5"><span class="toc-number">0.4.1.</span> <span class="toc-text">接受键盘输入</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#4-base%E7%9A%84%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-number">0.4.2.</span> <span class="toc-text">4.base的运算符</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-%E6%95%B0%E5%80%BC%E8%BF%90%E7%AE%97%E5%92%8C%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-number">0.4.3.</span> <span class="toc-text">1. 数值运算和运算符</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%95%B0%E5%80%BC%E8%BF%90%E7%AE%97%EF%BC%9A"><span class="toc-number">0.4.4.</span> <span class="toc-text">数值运算：</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-%E5%8F%98%E9%87%8F%E6%B5%8B%E8%AF%95%E5%92%8C%E5%86%85%E5%AE%B9%E6%9B%BF%E6%8D%A2"><span class="toc-number">0.4.5.</span> <span class="toc-text">2.变量测试和内容替换</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#5-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6"><span class="toc-number">0.4.6.</span> <span class="toc-text">5. 环境变量配置文件</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%AE%80%E4%BB%8B"><span class="toc-number">0.4.7.</span> <span class="toc-text">1.环境变量配置文件简介</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#2-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BD%9C%E7%94%A8"><span class="toc-number">0.4.7.1.</span> <span class="toc-text">2.环境变量配置文件作用</span></a></li></ol></li></ol></li></ol></li></ol></li><li class="toc-item toc-level-1"><a class="toc-link"><span class="toc-number"></span> <span class="toc-text">二、Shell编程</span></a><ol class="toc-child"><li class="toc-item toc-level-2"><a class="toc-link" href="#1-%E5%9F%BA%E7%A1%80%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F"><span class="toc-number">1.</span> <span class="toc-text">1. 基础正则表达式</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C%E9%80%9A%E9%85%8D%E7%AC%A6"><span class="toc-number">1.1.</span> <span class="toc-text">正则表达式和通配符</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#%E5%9F%BA%E7%A1%80%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F"><span class="toc-number">1.2.</span> <span class="toc-text">基础正则表达式</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#2-%E5%AD%97%E7%AC%A6%E6%88%AA%E5%8F%96%E5%91%BD%E4%BB%A4"><span class="toc-number">2.</span> <span class="toc-text">2.字符截取命令</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#Cut%E5%AD%97%E6%AE%B5%E6%8F%90%E5%8F%96%E5%91%BD%E4%BB%A4"><span class="toc-number">2.0.1.</span> <span class="toc-text">Cut字段提取命令</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#Printf%E5%91%BD%E4%BB%A4"><span class="toc-number">2.0.2.</span> <span class="toc-text">Printf命令</span></a></li></ol></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-%E5%AD%97%E7%AC%A6%E5%A4%84%E7%90%86%E5%91%BD%E4%BB%A4"><span class="toc-number">3.</span> <span class="toc-text">3.字符处理命令</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#4-%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD"><span class="toc-number">4.</span> <span class="toc-text">4.条件判断</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E6%8C%89%E7%85%A7%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B%E8%BF%9B%E8%A1%8C%E5%88%A4%E6%96%AD"><span class="toc-number">4.0.1.</span> <span class="toc-text">按照文件类型进行判断</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B9%8B%E9%97%B4%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83"><span class="toc-number">4.0.2.</span> <span class="toc-text">两个文件之间进行比较</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E4%B8%A4%E4%B8%AA%E6%95%B4%E6%95%B0%E4%B9%8B%E9%97%B4%E7%9A%84%E6%AF%94%E8%BE%83"><span class="toc-number">4.0.3.</span> <span class="toc-text">两个整数之间的比较</span></a></li></ol></li></ol></li></ol></div></div><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/liaoyia/2020/11/12/hello-world/" title="Hello World"><img src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/img/default.jpg" onerror="this.onerror=null;this.src='/liaoyia/img/404.jpg'" alt="Hello World"/></a><div class="content"><a class="title" href="/liaoyia/2020/11/12/hello-world/" title="Hello World">Hello World</a><time datetime="2020-11-12T05:23:35.000Z" title="发表于 2020-11-12 13:23:35">2020-11-12</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/liaoyia/2020/06/26/MySQL%E5%9F%BA%E7%A1%80/" title="Mysql回顾"><img src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lymysql.jpg" onerror="this.onerror=null;this.src='/liaoyia/img/404.jpg'" alt="Mysql回顾"/></a><div class="content"><a class="title" href="/liaoyia/2020/06/26/MySQL%E5%9F%BA%E7%A1%80/" title="Mysql回顾">Mysql回顾</a><time datetime="2020-06-26T12:34:53.000Z" title="发表于 2020-06-26 20:34:53">2020-06-26</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/liaoyia/2020/06/22/css%E5%B1%82%E5%8F%A0%E6%A0%B7%E5%BC%8F%E8%A1%A8/" title="Css层叠样式表期末复习"><img src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lyHTML.png" onerror="this.onerror=null;this.src='/liaoyia/img/404.jpg'" alt="Css层叠样式表期末复习"/></a><div class="content"><a class="title" href="/liaoyia/2020/06/22/css%E5%B1%82%E5%8F%A0%E6%A0%B7%E5%BC%8F%E8%A1%A8/" title="Css层叠样式表期末复习">Css层叠样式表期末复习</a><time datetime="2020-06-22T11:08:56.000Z" title="发表于 2020-06-22 19:08:56">2020-06-22</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/liaoyia/2020/04/29/MySQL%E8%A1%A8%E6%9F%A5%E8%AF%A2%E5%AE%9E%E8%AE%AD%E7%AC%94%E8%AE%B0/" title="MySQL表查询实训"><img src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lymonvpng.png" onerror="this.onerror=null;this.src='/liaoyia/img/404.jpg'" alt="MySQL表查询实训"/></a><div class="content"><a class="title" href="/liaoyia/2020/04/29/MySQL%E8%A1%A8%E6%9F%A5%E8%AF%A2%E5%AE%9E%E8%AE%AD%E7%AC%94%E8%AE%B0/" title="MySQL表查询实训">MySQL表查询实训</a><time datetime="2020-04-29T08:21:56.000Z" title="发表于 2020-04-29 16:21:56">2020-04-29</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/liaoyia/2020/04/09/MySQL%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/" title="MySQL数据更新和单表查询"><img src="https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lysee.png" onerror="this.onerror=null;this.src='/liaoyia/img/404.jpg'" alt="MySQL数据更新和单表查询"/></a><div class="content"><a class="title" href="/liaoyia/2020/04/09/MySQL%E6%95%B0%E6%8D%AE%E6%9B%B4%E6%96%B0/" title="MySQL数据更新和单表查询">MySQL数据更新和单表查询</a><time datetime="2020-04-09T08:08:56.000Z" title="发表于 2020-04-09 16:08:56">2020-04-09</time></div></div></div></div></div></div></main><footer id="footer" style="background-image: url('https://cdn.jsdelivr.net/gh/liaoyio/imgHosting/img-lybash.png')"><div id="footer-wrap"><div class="copyright">&copy;2018 - 2021 <i style="color:#FF6A6A" class="fa fa-heartbeat"></i> John Doe</div><div class="footer_custom_text">Hi, welcome to my <a target="_blank" rel="noopener" href="https://liaoyi.xyz/">blog</a>!</div></div><div class="container" id="jsi-flying-fish-container"></div><script src="js/fish.js"></script><style>@media only screen and (max-width: 767px){
#sidebar_search_box input[type=text]{width:calc(100% - 24px)}
}</style></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="阅读模式"><i class="fas fa-book-open"></i></button><button id="translateLink" type="button" title="简繁转换">繁</button><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button class="close" id="mobile-toc-button" type="button" title="目录"><i class="fas fa-list-ul"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><div class="search-dialog__title" id="local-search-title">本地搜索</div><div id="local-input-panel"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div></div><hr/><div id="local-search-results"></div><span class="search-close-button"><i class="fas fa-times"></i></span></div><div id="search-mask"></div></div><div><script src="/liaoyia/js/utils.js"></script><script src="/liaoyia/js/main.js"></script><script src="/liaoyia/js/tw_cn.js"></script><script src="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js"></script><script>function panguFn () {
  if (typeof pangu === 'object') pangu.autoSpacingPage()
  else {
    getScript('https://cdn.jsdelivr.net/npm/pangu/dist/browser/pangu.min.js')
      .then(() => {
        pangu.autoSpacingPage()
      })
  }
}

function panguInit () {
  if (false){
    GLOBAL_CONFIG_SITE.isPost && panguFn()
  } else {
    panguFn()
  }
}

document.addEventListener('DOMContentLoaded', panguInit)</script><script src="/liaoyia/js/search/local-search.js"></script><div class="js-pjax"></div><script src="https://cdn.jsdelivr.net/gh/sviptzk/HexoStaticFile@latest/Hexo/js/mouse_snow.min.js"></script><script src="js/jquery.min.js"></script><script src="/js/fish.js"></script><div class="aplayer no -destroy" data-id="000PeZCQ1i4XVs" data-server="tencent" data-type="artist" data-fixed="true" data-mini=" true" data-listFolded="false" data-order="random" data-preload="none" data-autoplay="true" muted></div><script src="/js/fishes.js"></script><script id="click-heart" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-heart.min.js" async="async" mobile="true"></script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script><script src="https://cdn.jsdelivr.net/gh/metowolf/MetingJS@1.2/dist/Meting.min.js"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>